package com.jza04.flightbooking.controller;

import com.jza04.flightbooking.entity.Passenger;
import com.jza04.flightbooking.service.PassengerService;
import com.jza04.flightbooking.service.TicketService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

/**
 * 旅客控制器
 */
@Controller
@RequestMapping("/passengers")
public class PassengerController {

    @Autowired
    private PassengerService passengerService;
    
    @Autowired
    private TicketService ticketService;
    
    /**
     * 查询所有旅客
     * @param model 用于向视图传递数据的模型对象
     * @return 返回旅客列表视图路径
     */
    @GetMapping
    public String listAllPassengers(Model model) {
        model.addAttribute("passengers", passengerService.findAllPassengers());
        return "passenger/list";
    }
    
    /**
     * 查看旅客详情
     * @param passengerId 旅客ID路径参数
     * @param model 用于向视图传递数据的模型对象
     * @return 返回旅客详情视图路径
     */
    @GetMapping("/{passengerId}")
    public String viewPassenger(@PathVariable Integer passengerId, Model model) {
        model.addAttribute("passenger", passengerService.findPassengerById(passengerId));
        // 查询旅客的购票记录
        model.addAttribute("tickets", ticketService.findTicketsByPassengerId(passengerId));
        return "passenger/view";
    }
    
    /**
     * 显示添加旅客表单
     * @param model 用于绑定表单数据的模型对象
     * @return 返回旅客添加表单视图路径
     */
    @GetMapping("/add")
    public String showAddForm(Model model) {
        model.addAttribute("passenger", new Passenger());
        return "passenger/add";
    }
    
    /**
     * 处理添加旅客请求
     * @param passenger 通过表单绑定的旅客对象
     * @return 重定向到旅客列表页面
     */
    @PostMapping("/add")
    public String addPassenger(Passenger passenger) {
        passengerService.addPassenger(passenger);
        return "redirect:/passengers";
    }
    
    /**
     * 显示编辑旅客表单
     * @param passengerId 需要编辑的旅客ID
     * @param model 用于预填充表单数据的模型对象
     * @return 返回旅客编辑表单视图路径
     */
    @GetMapping("/edit/{passengerId}")
    public String showEditForm(@PathVariable Integer passengerId, Model model) {
        model.addAttribute("passenger", passengerService.findPassengerById(passengerId));
        return "passenger/edit";
    }
    
    /**
     * 处理编辑旅客请求
     * @param passenger 包含更新信息的旅客对象
     * @return 重定向到旅客列表页面
     */
    @PostMapping("/edit")
    public String updatePassenger(Passenger passenger) {
        passengerService.updatePassenger(passenger);
        return "redirect:/passengers";
    }
    
    /**
     * 删除指定旅客
     * @param passengerId 需要删除的旅客ID
     * @return 重定向到旅客列表页面
     */
    @GetMapping("/delete/{passengerId}")
    public String deletePassenger(@PathVariable Integer passengerId) {
        passengerService.deletePassenger(passengerId);
        return "redirect:/passengers";
    }
    
    /**
     * 根据身份证号查询旅客信息
     * @param idCard 身份证号查询参数
     * @param model 用于传递查询结果的模型对象
     * @return 找到旅客返回详情视图，未找到返回列表视图并显示提示信息
     */
    @GetMapping("/search")
    public String searchPassengerByIdCard(@RequestParam String idCard, Model model) {
        Passenger passenger = passengerService.findPassengerByIdCard(idCard);
        if (passenger != null) {
            model.addAttribute("passenger", passenger);
            // 查询旅客的购票记录
            model.addAttribute("tickets", ticketService.findTicketsByPassengerId(passenger.getPassengerId()));
            return "passenger/view";
        } else {
            // 如果找不到，返回列表页面并显示提示消息
            model.addAttribute("message", "未找到身份证号为 " + idCard + " 的旅客");
            model.addAttribute("passengers", passengerService.findAllPassengers());
            return "passenger/list";
        }
    }
} 